interface IBillboard {
  billboard: any;
  image: string;
}

export class IconStateManager {
  private previousEntity: IBillboard;
  private previousImage: null;

  constructor() {
    this.previousEntity = null; // 保存上一个被点击的实体
    this.previousImage = null; // 保存上一个实体的原始图像
  }

  /**
   * 激活新图标并恢复上一个图标状态
   * @param {Object} entity - 当前点击的图标实体
   * @param {string} activeImage - 激活状态使用的图像路径
   */
  activate(entity, activeImage) {
    if (!entity || !entity.billboard) {
      console.warn('无效的实体或实体缺少billboard属性');
      return;
    }

    // 恢复上一个图标状态（如果存在且不是当前点击的同一个）
    if (this.previousEntity && this.previousEntity !== entity) {
      console.log('执行了');
      this._restorePrevious();
    }

    // 保存当前图标的原始状态
    this._saveCurrent(entity);

    // 设置新图标为激活状态
    entity.billboard.image.setValue(activeImage);
    entity.billboard.scale = 2;
  }

  /**
   * 恢复上一个图标的状态
   */
  _restorePrevious() {
    if (this.previousEntity && this.previousImage) {
      this.previousEntity.billboard.image.setValue(this.previousImage);
      this.previousEntity.billboard.scale = 0.5;
    }
    this._clearState();
  }

  /**
   * 保存当前图标状态
   * @param {Object} entity - 当前图标实体
   */
  _saveCurrent(entity) {
    this.previousEntity = entity;
    this.previousImage = entity.billboard.image.getValue();
  }

  /**
   * 清除保存的状态
   */
  _clearState() {
    this.previousEntity = null;
    this.previousImage = null;
  }

  /**
   * 获取当前激活的实体
   * @returns {Object|null} 当前激活的实体或null
   */
  getActiveEntity() {
    return this.previousEntity;
  }
}
